1. Field of the Invention
The present invention generally relates to a computer system and more particularly to a multi-node computer system in which software objects are distributed across the various nodes according to their frequency of use.
2. Background Information
An operating system comprises executable code that provides an infrastructure on which application programs may run. Operating systems generally provide a variety of resources which application programs may access. Such resources may include memory allocation resources, graphics drivers, etc., and may generally be referred to as the operating system “kernel.”
Part of the process of launching an operating system during system initialization involves loading the kernel in memory. For some operating systems, the kernel is loaded into a predetermined area of memory. That is, a pre-designated portion of memory is allocated for the operating system kernel. For such operating systems, that portion of memory allocated for the kernel is not relocatable and is the same region of memory each time the operating system is launched. Such an operating system may be referred to as being “zero-based, memory dependent.”
Some computer system architectures include a plurality of inter-coupled “nodes” with each node comprising a processor, memory and possibly other devices. Each processor may access its own “local” memory (i.e., the memory contained in the processor's node) as well as the memory of other nodes in the system. The processor-memory combination in each node may be referred to as being “tightly coupled” in that it is much easier and faster for a processor to access its own local memory than the memory of other nodes. Accessing remote memory involves submitting a request through the network between nodes for the desired data, whereas accessing local memory does not require use of network communication resources and the associated latencies.
In a zero-based, memory dependent operating system in which the operating system kernel must be loaded in a pre-designated portion of the memory space, the kernel may be loaded into the local memory of a single node. The node containing the kernel thus has easy, rapid access to the kernel resources. Other nodes in the system also have access to the kernel, but not necessarily as rapidly as the node in which the kernel physically resides. Some nodes may be coupled directly to the node containing the kernel, while other nodes may not couple to the kernel's node via other intervening nodes. This latter type of node, which does not have a direct connection to the node containing the kernel, may be granted access to the kernel, but such requests and accesses flow through the nodes intercoupling the node needing the kernel and the node containing the kernel. Moreover, the latency associated with kernel accesses is exacerbated as the number of intervening nodes increases between the requesting node and the node containing the kernel. It is desirable to reduce latency in this regard.